package com.gitee.wsl.scheduler.task

import com.gitee.wsl.scheduler.queue.ITagTask

/**
 * @author lingko
 * @version 1.0
 * @time 2021/12/27
 * @description 任务管理类
 */
interface TaskManager<T> {
    /**
     * 添加任务
     */
    fun addTask(task: T): Boolean

    /**
     *移除任务
     */
    fun removeTask(tag: String)

    /**
     * 获取任务
     */
    fun getTask(tag: String): T?

    /**
     * 是否已经有该任务
     */
    fun hasTak(tag: String): Boolean

    /**
     * 获取任务大小
     */
    fun getTaskSize(): Int

    /**
     * 清理任务
     */
    fun clear()

    fun getTaskList(): Collection<T>
}


/**
 * @author jack
 * @version 1.0
 * @time 2021/12/27
 * @description taskmanager 的默认实现类
 */
internal object PackageTaskManager : TaskManager<ITagTask> {
    /**
     * 任务容器
     */
    private val taskMap = mutableMapOf<String, ITagTask>()

    override fun addTask(task: ITagTask): Boolean {
        if (!hasTak(task.tag())) {
            taskMap[task.tag()] = task
            return true
        }
        return false
    }

    override fun removeTask(tag: String) {
        taskMap.remove(tag)
    }

    override fun hasTak(tag: String): Boolean {
        return taskMap.contains(tag)
    }

    override fun getTask(tag: String): ITagTask? {
        return taskMap[tag]
    }

    override fun getTaskSize(): Int {
        return taskMap.size
    }

    override fun clear() {
        taskMap.clear()
    }

    override fun getTaskList(): Collection<ITagTask> {
        return taskMap.values
    }
}
